home *** CD-ROM | disk | FTP | other *** search
/ Reverse Code Engineering RCE CD +sandman 2000 / ReverseCodeEngineeringRceCdsandman2000.iso / RCE / Ebooks / Thinking in C++ V2 / C13 / ArrayNew.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  2000-05-25  |  1.2 KB  |  48 lines

  1. //: C13:ArrayNew.cpp
  2. // From Thinking in C++, 2nd Edition
  3. // Available at http://www.BruceEckel.com
  4. // (c) Bruce Eckel 1999
  5. // Copyright notice in Copyright.txt
  6. // Operator new for arrays
  7. #include <new> // Size_t definition
  8. #include <fstream>
  9. using namespace std;
  10. ofstream trace("ArrayNew.out");
  11.  
  12. class Widget {
  13.   static const int sz = 10;
  14.   int i[sz];
  15. public:
  16.   Widget() { trace << "*"; }
  17.   ~Widget() { trace << "~"; }
  18.   void* operator new(size_t sz) {
  19.     trace << "Widget::new: "
  20.          << sz << " bytes" << endl;
  21.     return ::new char[sz];
  22.   }
  23.   void operator delete(void* p) {
  24.     trace << "Widget::delete" << endl;
  25.     ::delete []p;
  26.   }
  27.   void* operator new[](size_t sz) {
  28.     trace << "Widget::new[]: "
  29.          << sz << " bytes" << endl;
  30.     return ::new char[sz];
  31.   }
  32.   void operator delete[](void* p) {
  33.     trace << "Widget::delete[]" << endl;
  34.     ::delete []p;
  35.   }
  36. };
  37.  
  38. int main() {
  39.   trace << "new Widget" << endl;
  40.   Widget* w = new Widget;
  41.   trace << "\ndelete Widget" << endl;
  42.   delete w;
  43.   trace << "\nnew Widget[25]" << endl;
  44.   Widget* wa = new Widget[25];
  45.   trace << "\ndelete []Widget" << endl;
  46.   delete []wa;
  47. } ///:~
  48.